괄호 짝 맞추기
📔 문제 설명
소괄호는 짝을 맞춘 열린 괄호 '('와 닫힌 괄호 ')'로 구성합니다. 문제에서는 열린 괄호나 닫힌 괄호가 마구 뒤섞인 문자열을 줍니다. 이때 소괄호가 정상으로 열고 닫혔는지 판별하는 solution() 함수를 구현하세요. 만약 소괄호가 정상적으로 열고 닫혔다면 True를, 그렇지 않다면 False를 바환하면 됩니다.
📓 제약 조건
열린괄호는 자신과 가장 가까운 닫힌 괄호를 만나면 상쇄됩니다.
상쇄 조건은 열린 괄호가 먼저 와야 하고, 열린 괄호가 닫힌 괄호 사이에 아무것도 없어야 합니다.
더 상쇄할 괄호가 없을때 까지 상태를 반복합니다.
📓 입출력의 예
입력 | 출력 |
---|---|
(())() | True |
((())() | False |
❗ 1번째
먼저 스택을 정의 하고 괄호를 넣었을때 검사해줄 함수가 필요하다고 생각 하였고 함수는 3가지 방식으로 동작하게 짯습니다 첫번째 경우는 스택이 비어있고 닫는 괄호가 들어올때
입니다 이때는 null을 반환시켜 틀렸다는걸 전달
하도록 합니다 두번째 경우는 스택에 괄호가있을때 닫는 괄호가 들어올때
입니다 이때는 스택에서 열린 괄호를 하나 빼도록
합니다 세번째경우는 스택에 여는 괄호가 들어올때입니다.
이때는 스택에 추가
하도록합니다
이렇게 반복문을 거쳐 null값이 반환되면 바로 False로 반환되게 하고 마지막에 스택의 길이가 0일경우에만 True로 반환되게 합니다( 여는 괄호만 남아있을 경우는 False로 반환되게 )
✅ 실행 코드
function solution(괄호) {
let stack = [];
for (const str of 괄호) {
stack = 괄호삽입(stack, str);
if (stack === null) {
return false;
}
}
return stack.length === 0;
}
function 괄호삽입(stack, str) {
if (stack.length === 0 && str === ")") {
return null;
}
if (str === ")") {
stack.pop();
return stack;
}
if (str === "(") {
stack.push(str);
return stack;
}
}
📚 문제 느낀점
스택에 대해서 가볍게 알 수 있는 문제 였습니다.
스택이라는 자료구조에 대해서 정확히 숙지하고 어떤 특징을 갖고있는지 알 수 있었습니다.
© 문제 출처
저자 출제